package com.xiaotu.storage;

import java.util.Date;
import java.util.stream.Stream;

import org.springframework.stereotype.Component;

import com.xiaotu.common.util.Constants;
import com.xiaotu.common.util.DataRedisKeyUtils;
import com.xiaotu.common.util.SepratorUtil;
import com.xiaotu.storage.converter.AConverter;
import com.xiaotu.storage.converter.ConverterFactory;
import com.xiaotu.storage.model.CacheDataModel;

import net.sf.json.JSONObject;

@Component("MaoYanBoxOfficeDetailStorageProcessor")
public class MaoYanBoxOfficeDetailStorageProcessor extends AHSetStorageProcessor{
	
	public static final String[] FIELD_ARR = new String[]{"dataid","tvname","playDate", "playWeekDate",
            "broadCastType", "splitBox","splitBoxRatio", "splitTicketPrice","sliceRatio", "largeScaleRefund",
            "largeScaleRefundRatio", "maoYanRefund","maoYanRefundRatio", "avgNum","netSaleRatio", "goldenRatio",
            "screen", "seatRatio","seatNum", "totalBox","totalBoxRatio", "totalTicketPrice"};
	
	private static final String[] CONVERT_ARR = new String[]{
			AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,
			AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,
			AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,AConverter.STRING_CONVERT,
			AConverter.NUMBER_CONVERT,AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,
			AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,AConverter.STRING_CONVERT,
			AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,AConverter.STRING_CONVERT,
			AConverter.NUMBER_CONVERT,AConverter.NUMBER_CONVERT,AConverter.STRING_CONVERT,
			AConverter.NUMBER_CONVERT};

    private static final boolean[] THROW_ARR = new boolean[]{true, true, true, true,true,true, true,
    		true, true,true,true, true, true, true,true,true, true, true, true,true,true,true};

    @Override
    protected String getRedisKey(Date date)
    {
        return DataRedisKeyUtils.getKey(Constants.DataRedisKey.MAOYAN_BOX_DETAIL_STORAGE_YYYYMMDD, date);
    }

    @Override
    public String process(JSONObject target, CacheDataModel cacheData, Date date)
    {
    	Stream.of(FIELD_ARR).forEach(field ->
        {
        	Stream.of(FIELD_ARR).forEach(filed -> {
        		target.put(filed, target.get(filed).toString().replaceAll("[<>-]", "").trim());
        	});
        });
        return this.list2CSVLine(ConverterFactory.convert(target, FIELD_ARR, CONVERT_ARR,
                THROW_ARR), SepratorUtil.SEP_PIPE);
    }

    @Override
    public String getDataType()
    {
        return Constants.PageDataType.TV_RECORD;
    }

	@Override
	public String getTaskType() {
		return "MAOYAN_MOVIE_BOX_DETAIL";
	}
}
